www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/de_rate_match.m
function d = de_rate_match(e,iUE,iTB) % 功能:解速率匹配 % 输入: % e:速率匹配输入符号 % iUE:第iUE个用户 % iTB:第iTB个传输块 % 输出: % d:去速率匹配得到的符号 % % Author: 程式小组(徐萌 张妙 张晓庆) % Date: 2010-07-11 % =========================================================== global LTE_par cSubTC = 32; % 交织深度 rSubTC = LTE_par.UE_par.rSubTC(iTB,iUE); % 交织矩阵行数 E = length(e); % 速率匹配输出数据大小 Ncb = LTE_par.UE_par.Ncb(iTB,iUE); % 当前码块的软缓冲大小 rvidx = LTE_par.UE_par.rvidx(iTB,iUE); % 循环冗余版本 nanPosition = LTE_par.UE_par.nanPosition{iTB,iUE}; % 记录w里的NaN位置 turboOutputSize = LTE_par.UE_par.turboOutputSize(iTB,iUE); % Turbo编码输出 interleaverPattern = [0 16 8 24 4 20 12 28 2 18 10 26 6 22 14 30 1 17 9 25 5 21 13 29 3 19 11 27 7 23 15 31]+1;% 子块交织器列变换样式 表5.1.4-1 nPostLeav = rSubTC*cSubTC; % 交织器大小 w = zeros(1,3*nPostLeav); % 循环缓冲器 % ======================= 去比特选取 ============================== % 需要先确定w中的dummy bit for k = 1:3*nPostLeav if nanPosition(k) == 1 w(k) = NaN; end end k0 = rSubTC*(2*ceil(Ncb/(8*rSubTC))*rvidx+2); j = 0; for k = 1:E while isnan(w(mod(k0+j,Ncb)+1)) j = j+1; end loc = mod(k0+j,Ncb)+1; if w(loc) == 0 w(loc) = e(k); else w(loc) = (w(loc)+e(k))/2; end j = j+1; end % disp('解速率匹配得到的w') % disp(w) % ======================= 去子比特收集 ============================== v = zeros(3,nPostLeav); v(1,:) = w(1:nPostLeav); % 系统比特 v(2,:) = w(nPostLeav+1:2:end-1); % 校验1 v(3,:) = w(nPostLeav+2:2:end); % 校验2 % ======================= 去子块交织 ================================ iRow = 1; while iRow < 3 interleaverMatrix = reshape(v(iRow,:),rSubTC,cSubTC); % 按行优先将v放到一个矩阵中 interleaverMatrix(:,interleaverPattern) = interleaverMatrix; % 按照交织器列变换样式变换 interleaverMatrix = transpose(interleaverMatrix); % 转置,使得下一步按列输出时,为原始按行读出 v(iRow,:) = interleaverMatrix(:); % 按列优先顺序读取 iRow = iRow+1; end alphaPi = zeros(1,nPostLeav); for k = 1:nPostLeav t = floor((k-1)/rSubTC)+1; alphaPi(k) = mod(interleaverPattern(t)-1+cSubTC*(mod((k-1),rSubTC))+1,nPostLeav); % RSC2 路数据交织表 end alphaPi = alphaPi+1; v(iRow,alphaPi) = v(iRow,:); ND = nPostLeav-turboOutputSize; % dummy bit 大小 d = v(:,ND+1:end); % disp('解速率匹配的alphaPi') % disp(alphaPi)